package com.gl.glcourses.repository.jpa;

import java.util.List;

import javax.persistence.Query;

import org.springframework.stereotype.Repository;

import com.gl.glcourses.repository.IVotoRepository;
import com.gl.glcourses.vos.Votacion;
import com.gl.glcourses.vos.Voto;


@Repository
public class JpaVotoRepository extends JpaProjectRepository<Voto> implements IVotoRepository<Voto>{

	@Override
	public List<Voto> buscarVotos(Votacion votacion) {
		Query query = em.createQuery("FROM Voto as objeto WHERE objeto.votacion ="+votacion.getId());
		return (List<Voto>) query.getResultList();
	}
	
	@Override
	public List<Voto> bucarVotosUsuario(String nombreUsuario){
		Query query = em.createQuery("FROM Voto as voto WHERE voto.usuario.nombre = :param");
		query.setParameter("param", nombreUsuario);
		return (List<Voto>) query.getResultList();
	}
	
	@Override
	public Voto buscarVoto(String nombreVotacion, String nombreCurso, String nombreUsuario)  throws Exception{

		try {
		Query query = em.createQuery("FROM Voto as voto WHERE voto.votacionCurso.curso.nombre = :param2 AND voto.votacion.nombreVotacion =:param1 AND voto.usuario.nombre =:param3");
		
		query.setParameter("param1", nombreVotacion);
		query.setParameter("param2", nombreCurso);
		query.setParameter("param3", nombreUsuario);
		
		return (Voto) query.getSingleResult();
		} catch (Exception e) {
			return null;
		}
	}
	
	@Override
	public Voto saveVotoAndUpdate(Voto voto) throws Exception {
		Voto persistVoto;
		persistVoto=this.saveUpdate(voto);
		return persistVoto;
	}

	@Override
	public List<Voto> buscarVotosCurso(Long id) {
		Query query = em.createQuery("FROM Voto as voto WHERE voto.votacionCurso.curso.id = :param");
		query.setParameter("param", id);
		return (List<Voto>) query.getResultList();
	}

}
